Conventionally, software systems are constructed from software components that have fixed compile-time relationships. This means that adding additional logic to such a system requires modification to existing code, and then recompiling before the new code can be deployed and subsequently used.
For example, a program or component that provides reporting functions in relation to some input data will need to be modified if additional functionality is required, such as outputting an additional report. This sort of situation is commonplace, and as systems get more complex with incremental changes to provide additional functionality, then the programs used to implement them also grow ever more complex and progressively begin to degrade and eventually become unmaintainable in terms of cost, time and technical complexity.
Furthermore, there will often be several areas of a system that need to be modified when some additional functionality is needed. Thus, when additional functionality is added to a system, typically many areas of that system will require modification to access this additional functionality.
Various attempts have been made within the software industry to produce more loosely coupled and configurable software architectures such as that adopted by the Apache Software Foundation in its Open Source development of its Web Services engine Axis (see the http site at ws.apache.org/axis). However, these architectures are all tied to a particular problem space, and not applicable in the more general case.
In Axis, the problem that is being solved is how to run code on a remote machine from a local machine with a network in between (specifically, the problem solved by Apache Axis is that of exposing services over the web, i.e. Web services). Axis provides a solution to bridge the gap between the local machine and the remote machine bridging across various, and typically incompatible, protocols. However, Axis merely serves to translate instructions or messages from the local machine into a format that can be implemented over the network and then understood by the remote machine.